/*
 * File: rtGetNaN.c
 *
 * MATLAB Coder version            : 2.7
 * C/C++ source code generated on  : 01-Nov-2016 11:33:29
 */

 /*
  * Abstract:
  *       MATLAB for code generation function to initialize non-finite, NaN
  */
#include "rtGetNaN.h"
#define NumBitsPerChar	16U

  /* Function: rtGetNaN ==================================================
   * Abstract:
   * Initialize rtNaN needed by the generated code.
   * NaN is initialized as non-signaling. Assumes IEEE.
   */
real_T rtGetNaN(void)
{
	size_t bitsPerReal = sizeof(real_T) * (NumBitsPerChar);
	real_T nan = 0.0;
	if (bitsPerReal == 32U) {
		nan = rtGetNaNF();
	}
	else {
		uint16_T one = 1U;
		enum {
			LittleEndian,
			BigEndian
		} machByteOrder = (*((uint8_T *)&one) == 1U) ? LittleEndian : BigEndian;
		switch (machByteOrder) {
		case LittleEndian:
		{
			union {
				LittleEndianIEEEDouble bitVal;
				real_T fltVal;
			} tmpVal;

			tmpVal.bitVal.words.wordH = 0xFFF80000U;
			tmpVal.bitVal.words.wordL = 0x00000000U;
			nan = tmpVal.fltVal;
			break;
		}

		case BigEndian:
		{
			union {
				BigEndianIEEEDouble bitVal;
				real_T fltVal;
			} tmpVal;

			tmpVal.bitVal.words.wordH = 0x7FFFFFFFU;
			tmpVal.bitVal.words.wordL = 0xFFFFFFFFU;
			nan = tmpVal.fltVal;
			break;
		}
		}
	}

	return nan;
}

/* Function: rtGetNaNF ==================================================
 * Abstract:
 * Initialize rtNaNF needed by the generated code.
 * NaN is initialized as non-signaling. Assumes IEEE.
 */
real32_T rtGetNaNF(void)
{
	IEEESingle nanF = { { 0 } };
	uint16_T one = 1U;
	enum {
		LittleEndian,
		BigEndian
	} machByteOrder = (*((uint8_T *)&one) == 1U) ? LittleEndian : BigEndian;
	switch (machByteOrder) {
	case LittleEndian:
	{
		nanF.wordL.wordLuint = 0xFFC00000U;
		break;
	}

	case BigEndian:
	{
		nanF.wordL.wordLuint = 0x7FFFFFFFU;
		break;
	}
	}

	return nanF.wordL.wordLreal;
}

/*
 * File trailer for rtGetNaN.c
 *
 * [EOF]
 */
